
# 本例使用两列刺激-行动，构成一条长链。在两个状态之间来回切换

def main():
    lib = Lib()
    # 当在【静息】状态接收到【刺激0】刺激，发出【行动1】动作
    lib.reflect("刺激0", "静息", "行动1")
    # 当在【静息】状态接收到【反馈1】刺激，发出【行动2】动作
    lib.reflect("反馈1", "静息", "行动2")
    # 当在【静息】状态接收到【反馈2】刺激，跳转【状态1】状态，发出【行动3】动作
    lib.reflect("反馈2", "静息", "状态1", "行动3")
    # 当在【状态1】状态接收到【反馈3】刺激，发出【行动11】动作
    lib.reflect("反馈3", "状态1", "行动11")
    # 当在【状态1】状态接收到【反馈11】刺激，发出【行动12】动作
    lib.reflect("反馈11", "状态1", "行动12")
    # 当在【状态1】状态接收到【反馈12】刺激，跳转【静息】状态，发出【行动13】动作
    lib.reflect("反馈12", "状态1", "静息", "行动13")

    test(lib, A(), time =10)


from ai import Lib, Stater, test, Timer, Passer, EnvMesEvent


class A(Stater):
    def reg_event(self, frame):
        frame.act_callback.append(self.reply)

        p = Passer(1)
        @p.bindend
        def f():
            frame.post_event(EnvMesEvent("刺激0"))
        p.reg_event(frame)

    def reply(self, frame, e):
        a = e.tag
        if a == "行动1":
            r = "反馈1"
        elif a == "行动2":
            r = "反馈2"
        elif a == "行动3":
            r = "反馈3"
        elif a == "行动11":
            r = "反馈11"
        elif a == "行动12":
            r = "反馈12"
        elif a == "行动13":
            r = "刺激0"
        else:
            return

        p = Passer(1)
        @p.bindend
        def f():
            frame.post_event(EnvMesEvent(r))
        p.reg_event(frame)


main()
